// 行者登录云函数
"use strict";

const db = uniCloud.database();
const usersCollection = db.collection("users");
const crypto = require("crypto");
const jwt = require("jsonwebtoken");

// 生成JWT Token
function generateToken(userId, phone) {
  // 这里使用简单的密钥，实际项目中应该使用更安全的密钥
  const secret = "walking-b-walker-secret-key";
  // Token有效期设为1天
  const expiresIn = 60 * 60 * 24;

  return jwt.sign({ userId, phone }, secret, { expiresIn });
}

exports.main = async (event, context) => {
  try {
    const { phone, code } = event;

    // 参数验证
    if (!phone) {
      return {
        code: -1,
        message: "手机号不能为空",
      };
    }

    // 在实际项目中，这里应该验证短信验证码
    // 此处简化处理，仅验证用户是否存在

    // 查询用户
    const userResult = await usersCollection
      .where({
        phone,
        user_type: "walker", // 只允许行者类型的用户登录
      })
      .get();

    const user = userResult.data && userResult.data[0];

    // 用户不存在
    if (!user) {
      // 实际项目中，可能需要自动注册流程
      return {
        code: -2,
        message: "用户不存在，请先注册",
      };
    }

    // 用户被禁用
    if (user.status !== 1) {
      return {
        code: -3,
        message: "账号已被禁用，请联系客服",
      };
    }

    // 生成Token
    const token = generateToken(user.userId, user.phone);

    // 更新最后登录时间
    await usersCollection.doc(user._id).update({
      last_login_date: Date.now(),
    });

    // 返回用户信息和Token（不包含敏感信息）
    const userInfo = {
      _id: user._id,
      userId: user.userId,
      nickname: user.nickname,
      phone: user.phone,
      gender: user.gender,
      status: user.status,
      register_date: user.register_date,
      last_login_date: Date.now(),
    };

    return {
      code: 0,
      message: "登录成功",
      data: {
        token,
        userInfo,
      },
    };
  } catch (error) {
    console.error("行者登录失败:", error);
    return {
      code: -1,
      message: "登录失败: " + error.message,
    };
  }
};
